import axios from "axios";
import { Message, Loading } from "element-ui"
import router from "@/router";


//配置axios请求拦截器，用于添加token，和用户身份的合法性
axios.interceptors.request.use(config => {
    //从sessionStorage获取token
    const token = window.sessionStorage.getItem('token')

    //要进行判断处理，不拦截其他请求
    if (token){
        //存在token就在所有请求中添加请求头的token
        config.headers['Authorization'] = token
    }

    return config
},error => {

})


//配置axios响应拦截器，用于全局判断该响应是否成功，给出相应的提示信息
axios.interceptors.response.use(res => {

    if (res.status && res.status === 200){
        //状态码判断，请求是否成功，给出相应的提示信息
        if (res.data.code === 500 || res.data.code === 401 || res.data.code === 403 ){
            //返回null
            Message.error({message: res.data.message})
            return
        }

        //请求成功的数据
        if (res.data.message){
            // return Message.success({message: res.data.message})
            //不可以写成上面，到时候后面就拿不到数据拿到的是一个VueComponent组件
            Message.success({message: res.data.message})
        }
    }

    //返回相应的数据给后面处理，不放行后面拿不到数据
    return res.data
},error => {
    //相应错误的处理
    if (error.response.code === 504 || error.response.code === 404){
        Message.error('服务器被吃了')
    } else if(error.response.code === 403){
        Message.error('权限不足，请联系管理员')
    } else if(error.response.code === 401){
        Message.error('尚未登录，请登录')
        //跳转登录页面
        router.replace('/')
    }else {
        if (error.response.data.message){
            Message.error({message: error.response.data.message})
        } else {
            Message.error({message: '未知错误！'})
        }
    }
})

//请求路径前缀
let baseUrl = ''

//封装post请求
export const postRequest = (url, params) => {
    return axios({
        method: 'post',
        url: `${baseUrl}${url}`,
        data: params
    })
}

//封装get请求
export const getRequest = (url, params) => {
    return axios({
        method: 'get',
        url: `${baseUrl}${url}`,
        data: params
    })
}

//封装delete请求
export const deleteRequest = (url, params) => {
    return axios({
        method: 'delete',
        url: `${baseUrl}${url}`,
        data: params
    })
}

//封装pot请求
export const putRequest = (url, params) => {
    return axios({
        method: 'put',
        url: `${baseUrl}${url}`,
        data: params
    })
}

